package com.navinfo.tripanalysis.common.arithmetic.enums;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 事件类型
 * @author wangshuai、web
 */
public enum EventType {
    /**
     * 加油事件
     * */
    fuelCharge(0x01, 11001),
    /**
     * 漏油事件
     * */
    fuelLeak(0x02, 11002),
    /**
     * 点火事件
     * */
    ignite(0x03, 11003),
    /**
     * 熄火事件
     * */
    flameout(0x04, 11004),
    /**
     * 刹车事件
     * */
    brake(0x05, 12001),
    /**
     * 空挡滑行事件
     * */
    idlingSlide(0x06, 12002),
    /**
     * 巡航事件
     * */
    cruise(0x07, 12003),
    /**
     * ECO驾驶事件
     * */
    ecoDriving(0x08, 12004),
    /**
     *  换挡事件
     **/
    shiftGears(0x09, 13001),
    /**
     *  急减速事件
     * */
    sharpDeceleration(0x0A, 12005),
    /**
     *   无使用，冷车急加速事件
     * */
    coldSharpAcceleration(0x0B, 12006),
    /** 急加速事件
     * */
    sharpAcceleration(0x0C, 12007),
    /**
     * 急油门事件
     * */
    sharpStepOnAccelerator(0x0D, 12008),
    /**
     * 发动机超速事件
     * */
    engineOverSpeed(0x0E, 12009),
    /**
     * 车辆超速事件
     **/
    vehicleOverSpeed(0x0F, 12010),
    /**
     * 怠速事件
     * */
    vehicleParkingIdle(0x10, 12011),
    /**
     *  无使用，急转向事件
     * */
    sharpCurve(0x11, 12012),
    /**
     *  无使用，司机登陆
     * */
    login(0x12, 11005),
    /**
     *  无使用，司机登出
     * */
    logout(0x13, 11006),
    /**
     *  在挡滑行
     * */
    paringRangeSlide(0x14,12013),
    /**
     *  疲劳驾驶事件
     **/
    fatigueDriving(0x15, 12014),
    /**
     *   无使用，油量检测器正常/异常事件
     **/
    oilDetectorStateChanged(0x16, 21001),
    /**
     *   无使用，超长时间停车事件
     **/
    exceedTimeParking(0x17, 12015),
    /**
     *   无使用，重大事故上报
     **/
    majorAccidentReport(0x18, 14001),
    /**
     *   无使用，电子围栏事件
     **/
    electricFence(0x19, 11007),
    /**
     *  车辆起步事件
     **/
    vehicleStart(0x20, 12016),
    /**
     *  发动机低转速事件（脱档）
     **/
    engineLowSpeed(0x1A, 11),                               

    /**
     *   无使用，路线监控时间(其它模块加入）
     **/
    trajectory(0x21, 12017),
    /**
     *   无使用，终端断开重连(其它模块加入）
     **/
    terminalCloseOpen(0x22, 12018),
    /**
     *   无使用，停车轰油门事件
     **/
    parkingStepOnAccelerator(0x23, 12019),
    /**
     *   无使用，转速区间统计事件
     **/
    rotationRange(0x24, 12020),
    /**
     *   无使用，速度区间统计事件
     **/
    speedRange(0x25, 12021),
    /**
     *  无使用，海拔区间统计事件
     **/
    altitudeRange(0x26, 12022),
    /**
     *  单独0200算法链的弯道超速报警
     **/
    speedOverCurve_0200(0x27, 12023),
    /**
     *  单独0200算法链的停车事件
     **/
    parking_0200(0x28, 12024),
    /**
     *  单独0200算法链的车辆超速事件
     **/
    speedOver_0200(0x29, 12025),
    /**
     *  单独0200算法链的经过漏油点事件
     **/
    fuleLeakLocation_0200(0x30, 12026),


    /**
     *  东风急转弯事件
     **/
    sharpTurning_DF(0x2D, 12029),
    /**
     *  东风夜晚开车事件
     **/
    drivingNight_DF(0x2E, 12030),
    /**
     *  东风发动机高转速事件（脱档）
     **/
    rotationOver_DF(0x2F, 12031),
    /**
     *  东风全油门事件
     **/
    fullAccelerator_DF(0x30, 12032),
    /**
     *  东风大油门事件
     **/
    largeAccelerator_DF(0x31, 12033),
    /**
     *  东风超长怠速事件
     **/
    idleLong_DF(0x32, 12034),
    /**
     *  东风冷车运行事件
     **/
    drivingCold_DF(0x33, 12035),
    /**
     * 东风急加速事件
     */
    sharpAcceleration_DF(0x34, 12036),
    /**
     * 东风急减速事件
     */
    sharpDeceleration_DF(0x35, 12037),
    /**
     * 东风高速行驶事件
     */
    speedOver_DF(0x35, 12037),
    /**
     * 东风熄火滑行事件
     */
    coastFlameout_DF(0x36, 12038),
    /**
     * 东风空挡滑行事件
     */
    coastNeutralGear_DF(0x37, 12039),

    /**
     *  东风新版，冷车运行事件
     **/
    drivingCold_DFN(0x38, 12040),
    /**
     *  东风新版，夜晚开车事件
     **/
    drivingNight_DFN(0x39, 12041),
    /**
     *  东风新版，紧急停车事件
     **/
    emergencyStop_DFN(0x3A, 12042),

    /**
     * 东风新版，非ECO转速驾驶事件
     * */
    noEcoDriving(0x3B, 12043);

    public static final Map<Integer, EventType> CACHE=new LinkedHashMap<>();


    public final int index;
    public final int value;

    EventType(int index, int value) {
        this.index = index;
        this.value = value;
    }
    public final int getNumber(){
        return index;
    }

    public static EventType valueOf(int index) {
        if(CACHE.size()==0){
            for(EventType event: EventType.values()){
                CACHE.put(event.index, event);
            }
        }
        return CACHE.get(index);
    }

}
